import org.junit.Test;

/**
 * 一个数组，每隔n个删除一个数字，求最后一个删除的原始索引
 */
public class Demo {
    int[] arr = {2, 3, 6, 1, 2, 6, 7, 89, 3, 2, 7, 9, 23, 1, 2, 5};
    int n = 10; //每隔n个数删除
    boolean[] flag = new boolean[arr.length]; //标记
    int index = 0; //当前下标
    @Test
    public void delArray() {

        int totalNum = arr.length;

        int orangIndex = 0; //原始下标
        while (totalNum != 0){
            orangIndex = check(orangIndex);
            if(index % n == 0){
                flag[orangIndex] = true;
                totalNum--;
                System.out.println("i=" + orangIndex + ":val=" +arr[orangIndex]);
            }
            index++;
            orangIndex++;
            if(index >= totalNum){
                index = 0;
            }
            if(totalNum == 0){
                orangIndex--;
            }
        }
        System.out.println("最后删除的val=" +arr[orangIndex] + ":原始索引：" + orangIndex);
    }
    /** 返回未被删除的索引 */
    private int check(int orangIndex){
        if(orangIndex > arr.length -1){
            orangIndex = 0;
        }
        if(flag[orangIndex]){
            if(orangIndex == arr.length -1){ //加入最后一个元素已经是删除了的
                orangIndex = -1; //-1才能保证下一次从0开始
            }
            return check(++orangIndex);
        }
        return orangIndex;
    }
}
